<?php
/**
 * Nweb Image Manager
 *
 * This script is protected by copyright. It's use, copying, modification
 * and distribution without written consent of the author is prohibited.
 *
 * @category    source
 * @package     pl.nweb.image.adapter
 * @author      Krzysztof Kardasz <krzysztof.kardasz@gmail.com>
 * @copyright   Copyright (c) 2011 Krzysztof Kardasz
 * @license     http://www.gnu.org/licenses/lgpl-3.0.txt  GNU Lesser General Public
 * @version     3.0 $Id: iadapter.php 105 2012-02-24 09:01:04Z krzysztof.kardasz $
 * @link        http://code.google.com/p/nweb-framework/
 * @link        http://framework.nweb.pl
 */

namespace pl\nweb\image\adapter;

/**
 * Adapter Interface
 *
 * @category    source
 * @package     pl.nweb.image.adapter
 * @author      Krzysztof Kardasz <krzysztof.kardasz@gmail.com>
 * @copyright   Copyright (c) 2011 Krzysztof Kardasz
 * @version     3.0 $Id: iadapter.php 105 2012-02-24 09:01:04Z krzysztof.kardasz $
 */
interface iAdapter
{
    /**
     * Kopia obiektu
     *
     * @return \pl\nweb\image\adapter\iAdapter
     */
    public function getCopy();

    /**
     * Szerokość obrazu
     *
     * @return integer
     */
    public function getX();

    /**
     * Wysokość obrazu
     *
     * @return integer
     */
    public function getY();

    /**
     * Rozszerzenie pliku obrazu na podstawie typu
     *
     * @param  boolean $dot dołączenie kropki
     * @return string
     */
    public function getExtension($dot = false);

    /**
     * Zwraca typ mime obrazu
     *
     * @return string
     * @throws \pl\nweb\image\adapter\Exception
     */
    public function getMime();

    /**
     * Wycięcie zdjęcia
     *
     * @param  integer $left przesunięcie od lewej w px
     * @param  integer $top przesunięcie od góry w px
     * @param  integer $width szerokość wycięcia w px
     * @param  integer $height wysokość wycięcia w px
     * @return \pl\nweb\image\adapter\iAdapter
     * @throws \pl\nweb\image\adapter\Exception
     */
    public function crop($left, $top, $width, $height);

    /**
     * Zmiana rozmiaru zdjęcia
     *
     * @param  integer $width  szerokość w px
     * @param  integer $height wysokość w px
     * @return \pl\nweb\image\adapter\iAdapter
     * @throws \pl\nweb\image\adapter\Exception
     */
    public function resize($width, $height);

    /**
     * Zmiana rozmiaru (uwzględniając proporcje)
     *
     * @param  integer $width  szerokość w px
     * @param  integer $height wysokość w px
     * @return \pl\nweb\image\adapter\iAdapter
     * @throws \pl\nweb\image\adapter\Exception
     */
    public function scale($width, $height);

    /**
     * Zmiana szerokości obrazu (uwzględniając proporcje - zmienia się również wysokość)
     *
     * @param  integer $width  szerokość w px
     * @return Image
     * @throws \pl\nweb\image\adapter\Exception
     */
    public function scaleX($width);

    /**
     * Zmiana wysokości obrazu (uwzględniając proporcje - zmienia się również szerokość)
     *
     * @param  integer $height wysokość w px
     * @return Image
     * @throws \pl\nweb\image\adapter\Exception
     */
    public function scaleY ($height);

    /**
     * Dopasowanie zdjęcie do zadanego rozmiaru
     * skaluje, centruje i obcina zdjęcie do rozmiaru
     *
     * @param  integer $width  szerokość w px
     * @param  integer $height wysokość w px
     * @return \pl\nweb\image\adapter\iAdapter
     * @throws \pl\nweb\image\adapter\Exception
     */
    public function fitTo($width, $height);

    /**
     * Wyświetlnie obrazu
     *
     * @return void
     * @throws \pl\nweb\image\adapter\Exception
     */
    public function display();

    /**
     * Zapisanie obrazu do pliku
     *
     * @param null|string $filename plik docelowy
     * @return void
     * @throws \pl\nweb\image\adapter\Exception
     */
    public function save($filename = null);
}